/* 
  微信支付
    1.哪些人 哪些账号 可以实现微信支付
      1.企业账号
      2.企业账号的小程序后台中 必须给开发者 添加上白名单
        1.一个appid 可以同时绑定多个开发者
  2.获取token
    1.先判断缓存中是否有token
      1.没有跳转授权页面
      2.有
*/
/* 已经完成微信支付，删除缓存中已经被选中的商品
  1.手动删除已经被选中的商品
  2.删除后的购物车数据填充回去
*/
// 异步处理同步化
import regeneratorRuntime from '../../lib/runtime/runtime.js';
import { showModal, showToast } from '../../utils/asyncWx.js'
import { request } from '../../request/index.js';
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 收货信息
    address: {},
    // 加入购物车的商品信息
    cart: [],
    // 总数量
    totalNum: 0,
    // 总价格
    totalPrice: 0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  onShow() {
    // 1.获取缓存中的收货地址信息
    const address = wx.getStorageSync('address');
    // 1.获取缓存中的数据
    let cart = wx.getStorageSync("cart") || [];
    // 过滤后的购物车数组
    cart = cart.filter(v => v.checked);
    // 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      totalPrice += v.num * v.goods_price;
      totalNum += v.num;
    });
    // 2.把数据存储在address
    this.setData({ cart, totalPrice, totalNum, address });
    
  },
  // 点击支付
  async handleOrderPay() {
    try {
      // 1.判断缓存中是否有token
      const token = wx.getStorageSync("token");
      // 2.没有token就授权
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/auth'
        })
      } else {
        // 3.创建订单
        // 3.1 准备请求头参数
        const header = { Authorization: token };
        // 3.2 准备请求体参数
        const order_price = this.data.totalPrice;
        const Address = this.data.address.provinceName + this.data.address.cityName + this.data.address.countyName + this.data.address.detailInfo;;
        // 3.3 收货地址
        const consignee_addr = Address;
        // 3.4 数据
        let goods = [];
        this.data.cart.forEach(v => goods.push({
          goods_id: v.goods_id,
          goods_number: v.num,
          goods_price: v.goods_price
        }));
        const orderParams = { order_price, consignee_addr, goods };
        // 4.发送请求，获取订单编号   ------同样需要企业号
        // const {order_number}  = await request({url:'/my/orders/create',method:"post",data:orderParams,header});
        // let order_number = "HMDD202032400000000001";
        // 5.发起 预支付的接口  ---获取到支付需要的数据
        // const {pay} = await request({url:"/my/orders/req_unifiedorder",data:{order_number},method:'post',header});
        // 6.发起支付 内置支付接口
        // wx.requestPayment({
        //   ...pay,
        //   // timeStamp: '',
        //   // nonceStr: '',
        //   // package: '',
        //   // signType: '',
        //   // paySign: '',
        //   success: function(res){
        //     console.log('支付成功')
        //   },
        //   fail: function(res){
        //     console.log('支付失败')
        //   }
        // })
        // 7.查询后台订单支付状态
        // const res = await request({url:"/my/orders/chkOrder",data:{order_number},method:'post',header});
        // 返回支付成功或者失败
        // let res = '支付成功';
/* ----------------因为接口没法实现，我这里用其他方式实现-------------------- */
      let myDate = new Date();
      // 模拟订单编号
      let order_number = 'XLSC'+this.getDate(myDate)+Math.floor(Math.random()*22);
      // 模拟获取总的订单信息
      let orders = wx.getStorageSync("PayOrders") || [];
      // 模拟单个订单数据
      let OrderInfo = {};
      // 添加订单编号
      OrderInfo.order_number = order_number;
      // 添加订单地址
      OrderInfo.address = this.data.address;
      // 添加商品数据
      OrderInfo.goods = this.data.cart;
      // 添加商品总价格
      OrderInfo.totalPrice = this.data.totalPrice;
      // 添加商品总数量
      OrderInfo.totalNum = this.data.totalNum;
      OrderInfo.date = this.getDate(myDate,1);
      wx.showModal({
        title: '温馨提示',
        content: '这是在模拟付钱接口',
        success:res =>{
          if (res.confirm) {
            wx.showToast({
              title: '支付成功',
            });
            // 是否确认收货
            OrderInfo.Confirm = false;
            // 是否付款
            OrderInfo.isPay = true;
            // 添加数据到总订单中
            orders.push(OrderInfo);
            // 将订单数据放入本地缓存中
            wx.setStorageSync('PayOrders',orders);
            // 8.手动删除缓存中的已经支付的数据
            let newCart = wx.getStorageSync('cart');
            newCart = newCart.filter(v => !v.checked);
            wx.setStorageSync('cart', newCart);
            wx.navigateTo({ url: '/pages/order/order'});
            // 删除购物车数据
          } else if (res.cancel) {
            wx.showToast({
              title: '支付取消',
            });
            // 是否付款
            OrderInfo.isPay = false;
            // 添加数据到总订单中
            orders.push(OrderInfo);
            // 将订单数据放入本地缓存中
            wx.setStorageSync('PayOrders',orders);
            // 8.手动删除缓存中的已经支付的数据
            let newCart = wx.getStorageSync('cart');
            newCart = newCart.filter(v => !v.checked);
            wx.setStorageSync('cart', newCart);
            wx.navigateBack({
              delta: 3
            })
          }
        }
        })
      }

    } catch (err) {
      console.log(err)
    }
    
  },
  // 获取当前时间
  getDate(myDate,num=0){
    if(!num){
      let date = myDate.getFullYear()+''+(myDate.getMonth()+1)+''+myDate.getDate()+''+myDate.getHours()+''+myDate.getMinutes()+''+myDate.getSeconds();
      return date;
    }else{
      let date = myDate.getFullYear()+'-'+(myDate.getMonth()+1)+'-'+myDate.getDate()+' '+myDate.getHours()+':'+myDate.getMinutes()+':'+myDate.getSeconds();
      return date;
    }
    
  }
});